//
//  RxTableViewController.swift
//  RxSwiftExample
//
//  Created by lxf on 2021/11/24.
//

import UIKit
import RxSwift

class RxTableViewController: BaseViewController {
    
    let cellId = "RxTableViewCell"
    
    lazy var rxTableView: UITableView = {
        let rxTableView = UITableView()
        rxTableView.rowHeight = 60
        // 注册单元格
        rxTableView.register(RxTableViewCell.self, forCellReuseIdentifier: cellId)
        return rxTableView
    }()
    
    lazy var viewModel = RxTableViewModel()
    
    lazy var disposeBag = DisposeBag()
    
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }
    
    override func initSubViews() {
        super.initSubViews()
        self.view.addSubview(rxTableView)
    }
    
    override func addConstraints() {
        super.addConstraints()
        rxTableView.snp.makeConstraints { make in
            make.edges.equalTo(self.view)
        }
    }
    
    override func addRxSwift() {
        super.addRxSwift()
        
        viewModelBindTableView2()
        
    }

}

extension RxTableViewController {
    
    func viewModelBindTableView() {
        
        // viewModel绑定到TableView
        viewModel
            .data
            .bind(to: rxTableView.rx.items(cellIdentifier: cellId)) { _, model, cell in
                cell.textLabel?.text = model.name
                cell.detailTextLabel?.text = model.singer
        }.disposed(by: disposeBag)
        
        // TableView点击
        rxTableView.rx
            .modelSelected(RxTableModel.self)
            .subscribe(onNext: { model in
                debugPrint("点击 —— \(model.name)  \(model.singer)")
            }).disposed(by: disposeBag)
        
    }
    
    func viewModelBindTableView2() {
        
        // viewModel绑定到TableView
        viewModel
            .viewModels
            .asDriver(onErrorJustReturn: [])
            .drive(rxTableView.rx.items(cellIdentifier: cellId, cellType: RxTableViewCell.self)) { _, viewModel, cell in
                cell.cellViewModel = viewModel
            }
            .disposed(by: disposeBag)
        
        // TableView点击
        rxTableView.rx
            .modelSelected(RxCellViewModel.self)
            .subscribe(onNext: { viewModel in
                //debugPrint("点击 —— \(viewModel.model.name))  \(viewModel.model.singer)")
                viewModel.name.map({
                    debugPrint("$0 = \($0)")
                }).drive().disposed(by: viewModel.disposeBag)
            }).disposed(by: disposeBag)
    }
    
}

